package ufcg.edu.br.bigu;

import java.util.ArrayList;
import java.util.List;

public class Fachada {

	private static Fachada instance = new Fachada();
	private ListaUsuarios listaUsuarios = new ListaUsuarios();
	private ListaCaronas listaCaronas = new ListaCaronas();
	private ControleSessao controleSessao = new ControleSessao();

	private Fachada() {

	}

	public static Fachada getInstance() {

		return instance;
	}

	public void encerrarSistema() {
		// TODO: persistir sistema aqui

	}

	public void zerarSistema() {
		listaUsuarios.limparLista();

	}

	public void criarUsuario(String login, String nome, String senha,
			String endereco, String email) throws Exception {

		Usuario u = new Usuario(login, nome, senha, endereco, email);
		listaUsuarios.add(u);

	}

	public String abrirSessao(String login, String senha) throws Exception {
		return controleSessao.abrirSessao(login, senha, listaUsuarios);
	}

	public String localizarCarona(String idSessao, String origem, String destino) {

		return listaCaronas.localizarCarona(idSessao, origem, destino);
	}

	public String cadastrarCarona(String idSessao, String origem,
			String destino, String data, String hora, String vagas)
			throws Exception {

		Carona c = new Carona(idSessao, origem, destino, data, hora, vagas);

		return listaCaronas.add(c);
	}

	public String getAtributoCarona(String idCarona, String atributo) {

		Carona c = listaCaronas.getCaronaComId(idCarona);
		return c.getAtributoCarona(atributo);

	}

	public String getTrajeto(String idCarona) {
		Carona c = listaCaronas.getCaronaComId(idCarona);
		return c.getTrajeto();

	}

	public String getCarona(String idCarona) {
		Carona c = listaCaronas.getCaronaComId(idCarona);
		return c.toString();
	}

	public String sugerirPontoEncontro(String idSessao, String idCarona,
			String pontos) throws Exception {
		Carona c = listaCaronas.getCaronaComId(idCarona);
		SugestaoEncontro sugestao = new SugestaoEncontro(idSessao, pontos);
		String idSugestao = c.addSugestaoPontoEncontro(sugestao);

		return idSugestao;
	}

	public String responderSugestaoPontoEncontro(String idSessao,
			String idCarona, String idSugestao, String pontos) throws Exception {
		Carona c = listaCaronas.getCaronaComId(idCarona);
		if (c.getIdSessao().equals(idSessao)) {
			c.responderSugestaoPontoEncontro(idSugestao, pontos);
		}

		return idSugestao;
	}

	public void encerrarSessao(String login) {
		Usuario u = listaUsuarios.getUsuarioCadastrado(login);
	}

	public String solicitarVagaPontoEncontro(String idSessao, String idCarona,
			String ponto) {
		Carona c = listaCaronas.getCaronaComId(idCarona);
		String idSolicitacao = null;
		if (c != null) {
			Usuario dono = controleSessao.getUsuarioSessao(c.getIdSessao());
			Usuario solicitador = controleSessao.getUsuarioSessao(idSessao);

			if (dono != null && solicitador != null) {
				SolicitacaoVaga s = new SolicitacaoVaga(idSessao,c.getIdCarona(), c.getOrigem(), c.getDestino(), dono.getNome(),solicitador.getNome(),ponto);
				idSolicitacao = c.addSolicitacaoPontoEncontro(s);

			}

		}

		return idSolicitacao;
	}
	
	public void aceitarSolicitacaoPontoEncontro(String idSessao, String idSolicitacao){
		Carona c = listaCaronas.getCaronaComSolicitacao(idSolicitacao, idSessao);
		c.aceitarSolicitacaoPontoEncontro(idSolicitacao);
	}
}
